package com.heima.feign.article;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.heima.article.dtos.ApArticleConfigDto;
import com.heima.article.dtos.ApArticleDto;
import com.heima.article.pojos.ApArticle;
import com.heima.article.pojos.ApArticleConfig;
import com.heima.model.common.dtos.PageResponseResult;
import com.heima.model.common.dtos.ResponseResult;
import com.heima.wemedia.vos.WmNewsStatisticsVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.Map;

//服务调用失败 调用失败的返回结果
@FeignClient(value = "leadnews-article", fallback = ArticleClientFallback.class)
//@FeignClient(value = "leadnews-article")
public interface ArticleFeignClient {

    /**
     * 发布文章至文章微服务
     *
     * @param apArticleDto 前端参数articleDto
     * @return 返回保存文章, 文章id
     */
    @PostMapping("/api/v1/article/save")
    public ResponseResult<Long> save(@RequestBody ApArticleDto apArticleDto);

    @PostMapping("/api/v1/article/getArticle")
    public ResponseResult<ApArticle> getArticle(@RequestBody Long articleId);

    /**
     * 查询文章配置信息
     *
     * @param apArticleConfigDto 前端参数dto
     * @return 返回结果
     */
    @PostMapping("/api/v1/article/getArticleConfig")
    public ResponseResult<ApArticleConfig> getArticleConfig(@RequestBody ApArticleConfigDto apArticleConfigDto);

    /**
     * 修改文章配置信息
     *
     * @param apArticleConfigDto 前端参数dto
     * @return 返回结果
     */
    @PostMapping("/api/v1/article/updateArticleConfig")
    public ResponseResult updateArticleConfig(@RequestBody ApArticleConfigDto apArticleConfigDto);


    /**
     * 统计作者发布文章的点赞量 收藏量
     *
     * @param authorId 文章作者id
     * @return 返回结果
     */
    @GetMapping("/api/v1/article/statistics")
    public ResponseResult<Map<String, Integer>> statistics(@RequestParam("authorId") Integer authorId,
                                                           @RequestParam("beginDate") Date beginDate,
                                                           @RequestParam("endDate") Date endDate);

    /**
     * 分页查询发布文章相关信息
     *
     * @param beginDate 开始时间
     * @param endDate   结束时间
     * @param page      页码
     * @param size      显示条数
     * @return 返回结果
     */
    @GetMapping("/api/v1/article/articlePage")
    public ResponseResult<Page<WmNewsStatisticsVo>> articlePage(@RequestParam("beginDate") Date beginDate,
                                                                @RequestParam("endDate")Date endDate,
                                                                @RequestParam("page") Integer page,
                                                                @RequestParam("size") Integer size,
                                                                @RequestParam("apUserId") Integer apUserId);
}
